package org.example;

/**
 * @Author: jixiaotian.ch@qq.com
 * @Date : 2020/9/2
 */
public class SynchronizedDemo {

    //方法层面
    //相当于synchronized（this）
    synchronized void demo() {

    }

    /*synchronized static void demo02() {

    }*/

    //代码层面
    Object obj = new Object();
    void demo03() {
        synchronized (obj) {
            //线程安全性问题.

        }
    }

    //类锁
    //静态方法修饰，两个对象访问demo04也会存在互斥性
    synchronized static void demo04() {

    }
    void demo05() {
        synchronized (SynchronizedDemo.class){

        }
    }


    //代码块



    //锁的范围
    // 实例锁 对象锁：
    // 类锁：静态方法、类对象
    // 类锁和对象锁体现在加锁的时候的互斥范围
    // 代码块
    public static void main(String[] args) {

        //实例锁demo
        SynchronizedDemo synchronizedDemo = new SynchronizedDemo();
        //锁的互斥性
        //同一个实例
        // 访问同一个实例，t1抢占到锁后，在t1释放锁之前，t2需要等待
        new Thread(()->{
            synchronizedDemo.demo();
        },"t1").start();

        new Thread(()->{
            synchronizedDemo.demo();
        },"t2").start();


    }

}
